{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Start here to begin with Stingray." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import numpy as np\n", "%matplotlib inline\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "`StingrayTimeseries` is a generic time series object, and also acts as the base class for Stingray's `Lightcurve` and `EventList`. It is a data container that associate times with measurements.\n", "The only compulsory element in such a series is indeed the `time` attribute.\n", "\n", "Many of the methods in `Lightcurve` and `EventList`, indeed, are implemented in this class. For example, methods that truncate, add, subtract the series, or that filter it in some way (e.g. by adding a mask or applying the good time intervals)\n", "\n", "\n", "### Internal Class structure\n", "\n", "For most of this internal behavior, all turns around the concept of \"Array attributes\", \"Internal attributes\", \"Meta attributes\", and \"Not array attributes\". \n", "\n", "**Array attributes** Ideally, if one were to create a new object based on a table format, array attributes would be the table columns (so, they all have the same length of the `time` column).\n", "Example array attributes are\n", "\n", "+ `counts`, the number of counts in each bin of a typical X-ray light curve;\n", "+ `dt`, the sampling time, *if data are not evenly sampled*;\n", "\n", "Note that array attributes can have any dimension. The only important thing is that the *first dimension's size* is equal to the size of `time`. E.g. if time is `[1, 2, 3]` (shape (3,) ), an array attribute could be `[[4, 4], [2, 3], [4, 5]]` (shape (3, 2)), but not `[[1, 2, 3]]` (shape (1, 3))\n", "\n", "**Meta attributes** The most useful attributes are probably \n", "\n", "+ `gti`, or the Good Time Intervals where measurements are supposed to be reliable; \n", "+ `dt`, the sampling time, when *constant* (evenly sampled time series);\n", "+ `mjdref` the reference MJD for all the time measurements in the series\n", "\n", "**Internal array attributes** Some classes, like `Lightcurve`, expose attributes (such as `counts`, `counts_err`) that are not arrays but properties. This is done for a flexible manipulation of counts, count rates etc, that can be set asynchronously depending on which one was set first (see the `Lightcurve` documentation). The actual arrays containing data are internal attributes (such as `_counts`) that get set only if needed. Another thing that lightcurve does is throwing an error if one wants to set the time to a different length than its array attributes. The actual time is stored in the `_time` attribute, and this check is done when one tries to modify the time through the `time` property (by setting `lc.time`).\n", "\n", "**Not array attributes** Some quantities, such as GTI, might in principle have the same length of `time`. One can then add `gti` to the list of `not_array_attributes`, that protects from the hypothesis of considering `gti` a standard array attribute." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating a time series" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from stingray import StingrayTimeseries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A `StingrayTimeseries` object is usually created in one of the following two ways:\n", "\n", "1. From an array of time stamps and an array of any name.\n", " \n", " ts = StingrayTimeseries(times, array_attrs=dict(my_array_attr=my_attr), **opts)\n", "\n", " where `**opts` are any (optional) keyword arguments (e.g. `dt=0.1`, `mjdref=55000`, etc.)\n", " In principle, array attributes can be specified as simple keyword arguments. But when we use the `array_attrs` keyword, we will run a check on the length of the arrays, and raise an error if they are not of a shape compatible with the ``time`` array.\n", "\n", "2. A binned `StingrayTimeseries`, a generalization of a uniformly sampled light curve, can be obtained from an EventList object, through the `to_binned_timeseries` method.\n", "\n", " ev = EventList(times, mjdref=55000)\n", " ev.my_attr = my_attr_array\n", " ts = ev.to_binned_timeseries(ev, dt=1, array_attrs={\"my_attr\": my_attr}, **opts)\n", "\n", "as will be described in the next sections.\n", "\n", "An additional possibility is creating an empty `StingrayTimeseries` object, whose attributes will be filled in later:\n", "\n", " ts = StingrayTimeseries()\n", "\n", "or, if one wants to specify any keyword arguments:\n", "\n", " ts = StingrayTimeseries(**opts)\n", "\n", " This option is usually only relevant to advanced users, but we mention it here for reference" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Array of time stamps and counts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create 1000 time stamps" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "times = np.arange(1000)\n", "times[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create 1000 random Poisson-distributed counts:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.24828431, 1.65343943, 0.48755812, 0.53731942, 0.06821194,\n", " 0.67721999, -1.52268207, 0.90104872, -1.54513351, 0.4345529 ])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_attr = np.random.normal(size=len(times))\n", "my_attr[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a Lightcurve object with the times and counts array." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "ts = StingrayTimeseries(times, array_attrs={\"my_attr\": my_attr})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The number of data points can be counted with the `len` function, or through the `n` property." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1000, 1000)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(ts), ts.n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. From an event list\n", "\n", "Often, you might have an event list with associated properties such as weight, polarization, etc. If this is the case, you can use the `to_binned_timeseries` method of `EventList` to turn these photon arrival times into a regularly binned timeseries." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "from stingray import EventList\n", "\n", "arrival_times = np.sort(np.random.uniform(0, 100, 1000))\n", "goofy = np.random.normal(size=arrival_times.size)\n", "mickey = np.random.chisquare(2, size=arrival_times.size)\n", "ev = EventList(arrival_times, gti=[[0, 100]])\n", "ev.goofy = goofy\n", "ev.mickey = mickey" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To create the time series, it's necessary to specify the sampling time `dt`. By default, the time series will create histograms with all the array attributes of `EventLists` with the same length as `ev.time`." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "ts_new = ev.to_binned_timeseries(dt=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can specify which attributes to use through the `array_attrs` keyword" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "ts_new_small = ev.to_binned_timeseries(dt=1, array_attrs=[\"goofy\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All attributes that have been histogrammed can be accessed through the `array_attrs` method:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['counts', 'goofy', 'mickey']" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts_new.array_attrs()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['counts', 'goofy']" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts_new_small.array_attrs()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note the `counts` attribute, which is always created by the `to_binned_timeseries` method and gives the number of photons which concurred to creating each value of the time series." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The time bins can be seen with the `.time` attribute" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5,\n", " 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5,\n", " 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5,\n", " 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5,\n", " 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5,\n", " 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5,\n", " 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5,\n", " 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5,\n", " 88.5, 89.5, 90.5, 91.5, 92.5, 93.5, 94.5, 95.5, 96.5, 97.5, 98.5,\n", " 99.5])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts_new.time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Good Time Intervals\n", "\n", "`StingrayTimeseries` (and most other core `stingray` classes) support the use of *Good Time Intervals* (or GTIs), which denote the parts of an observation that are reliable for scientific purposes. Often, GTIs introduce gaps (e.g. where the instrument was off, or affected by solar flares). By default. GTIs are passed and don't apply to the data within a `StingrayTimeseries` object, but become relevant in a number of circumstances, such as when generating `Powerspectrum` objects. \n", "\n", "If no GTIs are given at instantiation of the `StingrayTimeseries` class, an artificial GTI will be created spanning the entire length of the data set being passed in, including half a sample time before and after:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "times = np.arange(1000)\n", "counts = np.random.poisson(100, size=len(times))\n", "\n", "ts = StingrayTimeseries(times, array_attrs={\"counts\":counts}, dt=1)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-5.000e-01, 9.995e+02]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts.gti" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 96, 92, 92, 103, 101, 95, 112, 108, 97, 92, 102, 88, 82,\n", " 82, 98, 107, 94, 90, 116, 97, 104, 109, 103, 90, 98, 104,\n", " 91, 103, 89, 103, 116, 88, 96, 106, 106, 81, 92, 99, 88,\n", " 88, 114, 95, 84, 102, 99, 89, 97, 84, 88, 100, 100, 89,\n", " 86, 100, 100, 110, 106, 95, 117, 113, 101, 99, 95, 97, 108,\n", " 107, 112, 82, 122, 101, 98, 94, 106, 109, 96, 103, 125, 105,\n", " 107, 95, 91, 94, 92, 118, 90, 101, 96, 113, 95, 109, 92,\n", " 101, 101, 97, 107, 109, 110, 113, 100, 113, 110, 91, 99, 103,\n", " 98, 94, 99, 99, 87, 92, 96, 111, 105, 91, 88, 83, 107,\n", " 78, 102, 90, 99, 96, 99, 107, 90, 111, 86, 129, 105, 98,\n", " 91, 100, 118, 95, 97, 106, 96, 117, 107, 102, 101, 98, 89,\n", " 105, 104, 104, 85, 113, 89, 89, 117, 111, 112, 117, 102, 129,\n", " 105, 99, 106, 83, 83, 93, 114, 91, 116, 90, 117, 109, 95,\n", " 103, 102, 90, 95, 83, 99, 108, 80, 104, 111, 107, 100, 87,\n", " 87, 97, 100, 115, 107, 93, 106, 76, 105, 88, 100, 99, 99,\n", " 89, 87, 89, 105, 106, 88, 113, 95, 120, 96, 107, 96, 114,\n", " 97, 106, 106, 94, 83, 111, 91, 109, 93, 108, 106, 100, 85,\n", " 84, 107, 126, 102, 99, 95, 100, 103, 90, 92, 89, 84, 120,\n", " 114, 98, 117, 97, 109, 95, 100, 97, 84, 90, 110, 103, 108,\n", " 92, 82, 115, 115, 97, 121, 104, 98, 89, 80, 99, 86, 98,\n", " 97, 100, 96, 96, 125, 112, 95, 86, 94, 100, 91, 123, 98,\n", " 76, 84, 109, 87, 92, 108, 89, 94, 94, 101, 110, 94, 94,\n", " 106, 103, 99, 117, 87, 101, 97, 79, 117, 107, 111, 113, 107,\n", " 106, 109, 104, 102, 99, 114, 89, 109, 95, 111, 75, 99, 115,\n", " 91, 118, 112, 91, 87, 106, 94, 98, 102, 110, 92, 84, 97,\n", " 118, 108, 89, 98, 99, 109, 122, 105, 101, 102, 107, 120, 87,\n", " 90, 109, 100, 107, 107, 98, 96, 90, 100, 115, 92, 86, 100,\n", " 114, 109, 91, 98, 96, 91, 105, 95, 93, 86, 85, 109, 107,\n", " 97, 101, 101, 119, 98, 111, 102, 101, 107, 107, 89, 107, 93,\n", " 98, 91, 102, 91, 116, 105, 98, 105, 95, 106, 99, 122, 111,\n", " 108, 84, 100, 111, 91, 86, 95, 104, 95, 129, 103, 80, 90,\n", " 105, 112, 97, 107, 113, 103, 96, 100, 99, 101, 111, 81, 110,\n", " 101, 97, 98, 108, 96, 97, 95, 107, 91, 89, 108, 99, 85,\n", " 97, 86, 103, 94, 111, 94, 83, 99, 91, 103, 96, 99, 98,\n", " 94, 111, 101, 93, 88, 98, 105, 88, 125, 109, 107, 100, 95,\n", " 104, 87, 97, 110, 98, 85, 114, 96, 116, 115, 99, 86, 96,\n", " 101, 99, 84, 96, 96, 104, 85, 86, 98, 109, 102, 90, 111,\n", " 104, 92, 107, 103, 101, 91, 106, 105, 93, 99, 108, 110, 85,\n", " 88, 93, 105, 105, 120, 87, 103, 101, 125, 81, 94, 89, 107,\n", " 96, 103, 104, 98, 98, 88, 108, 79, 92, 113, 112, 93, 99,\n", " 105, 90, 87, 80, 105, 111, 102, 109, 95, 103, 93, 105, 92,\n", " 113, 107, 94, 113, 108, 82, 100, 136, 88, 100, 89, 100, 113,\n", " 94, 116, 100, 93, 100, 110, 100, 108, 93, 85, 105, 95, 109,\n", " 99, 92, 96, 111, 110, 110, 108, 103, 92, 108, 95, 84, 106,\n", " 94, 112, 110, 98, 103, 80, 87, 81, 104, 93, 97, 100, 97,\n", " 89, 100, 108, 104, 98, 107, 91, 94, 94, 112, 92, 103, 99,\n", " 109, 98, 115, 114, 89, 97, 95, 95, 101, 102, 117, 88, 109,\n", " 92, 101, 97, 94, 115, 89, 102, 97, 89, 107, 99, 90, 116,\n", " 89, 115, 117, 108, 104, 101, 115, 87, 93, 96, 97, 99, 104,\n", " 94, 106, 111, 102, 104, 94, 97, 111, 90, 99, 103, 113, 87,\n", " 111, 99, 89, 86, 112, 84, 98, 67, 91, 98, 93, 99, 99,\n", " 116, 110, 106, 82, 88, 85, 88, 116, 116, 104, 104, 118, 106,\n", " 101, 83, 104, 106, 101, 101, 116, 103, 108, 121, 87, 115, 97,\n", " 79, 103, 109, 94, 91, 95, 99, 103, 111, 118, 90, 117, 91,\n", " 81, 90, 102, 115, 105, 100, 91, 95, 97, 98, 94, 99, 105,\n", " 94, 91, 113, 130, 116, 111, 95, 105, 101, 109, 108, 97, 105,\n", " 106, 106, 109, 106, 110, 102, 124, 109, 103, 91, 105, 87, 117,\n", " 99, 86, 107, 94, 98, 102, 108, 95, 99, 90, 110, 94, 66,\n", " 98, 122, 100, 93, 103, 86, 101, 92, 107, 80, 122, 99, 112,\n", " 99, 107, 120, 97, 89, 99, 111, 107, 98, 103, 112, 111, 97,\n", " 88, 84, 96, 95, 91, 94, 101, 89, 102, 104, 70, 122, 98,\n", " 104, 100, 101, 87, 97, 93, 84, 103, 95, 90, 96, 106, 86,\n", " 100, 92, 93, 99, 110, 86, 100, 93, 107, 101, 87, 95, 105,\n", " 114, 109, 100, 91, 99, 109, 97, 105, 93, 95, 103, 93, 93,\n", " 82, 104, 93, 114, 107, 110, 99, 86, 86, 119, 107, 86, 89,\n", " 95, 103, 85, 98, 99, 102, 107, 109, 108, 93, 93, 99, 116,\n", " 118, 102, 94, 112, 88, 110, 96, 107, 110, 101, 90, 101, 100,\n", " 96, 102, 125, 112, 93, 101, 88, 99, 80, 95, 108, 100, 113,\n", " 97, 109, 100, 97, 93, 95, 92, 91, 93, 98, 89, 92, 99,\n", " 96, 99, 96, 83, 100, 93, 106, 89, 113, 88, 79, 109, 105,\n", " 93, 110, 94, 109, 102, 103, 87, 98, 120, 92, 104, 100, 117,\n", " 102, 95, 106, 104, 103, 105, 107, 95, 97, 105, 102, 119, 101,\n", " 99, 99, 101, 92, 87, 104, 104, 96, 107, 98, 88, 95, 102,\n", " 86, 104, 101, 94, 114, 99, 98, 98, 100, 100, 98, 103, 127,\n", " 98, 82, 106, 94, 101, 108, 101, 98, 76, 97, 88, 99, 108,\n", " 92, 104, 83, 95, 104, 97, 84, 101, 107, 106, 94, 88, 103,\n", " 96, 101, 100, 100, 102, 85, 103, 97, 95, 100, 99, 80])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts.counts" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "999\n", "[[-5.000e-01 9.995e+02]]\n" ] } ], "source": [ "print(times[0]) # first time stamp in the light curve\n", "print(times[-1]) # last time stamp in the light curve\n", "print(ts.gti) # the GTIs generated within Lightcurve" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "GTIs are defined as 2-dimensional array (or a list of 2-tuples):" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "gti = [(0, 500), (600, 1000)]" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "ts = StingrayTimeseries(times, array_attrs={\"counts\":counts}, gti=gti)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0 500]\n", " [ 600 1000]]\n" ] } ], "source": [ "print(ts.gti)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll get back to these when we talk more about some of the methods that apply GTIs to the data.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Combining StingrayTimeseries objects" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A `StingrayTimeseries` object can be combined with others in various ways. The best way is using the `join` operation, that combines the data according to the strategy defined by the user.\n", "\n", "The default strategy is `infer`. Similar to what can be seen in `EventLists`, it decides what to do depending on the fact that GTIs have overlaps or not. If there are overlaps, GTIs are intersected. Otherwise, they are appended and merged. But one can select between:\n", "\n", "+ \"intersection\", the GTIs are merged using the intersection of the GTIs. \n", "+ \"union\", the GTIs are merged using the union of the GTIs. \n", "+ \"append\", the GTIs are simply appended but *they must be mutually exclusive* (have no overlaps).\n", "+ \"none\", a single GTI with the minimum and the maximum time stamps of all GTIs is returned. \n", "\n", "The data are always all merged. No filtering is applied for the new GTIs. But the user can always use the `apply_gtis` method to filter them out later." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "New gti: [[0.5 3.5]\n", " [4.5 7.5]]\n", "New time: [1. 1.1 2. 2.1 3. 4. 5. 6.5]\n", "New blah: [1 2 1 2 1 2 2 2]\n" ] } ], "source": [ "ts = StingrayTimeseries(\n", " time=[1, 2, 3], \n", " gti=[[0.5, 3.5]], \n", " array_attrs={\"blah\": [1, 1, 1]},\n", ")\n", "ts_other = StingrayTimeseries(\n", " time=[1.1, 2.1, 4, 5, 6.5], \n", " array_attrs={\"blah\": [2, 2, 2, 2, 2]}, \n", " gti=[[1.5, 2.5], [4.5, 7.5]],\n", ")\n", "\n", "ts_new = ts.join(ts_other, strategy=\"union\")\n", "\n", "for attr in [\"gti\", \"time\", \"blah\"]:\n", " print(f\"New {attr}:\", getattr(ts_new, attr))\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "New gti: [[0.5 3.5]]\n", "New time: [1. 1.1 2. 2.1 3. 4. 5. 6.5]\n", "New blah: [1 2 1 2 1 2 2 2]\n" ] } ], "source": [ "ts_new = ts.join(ts_other, strategy=\"intersect\")\n", "\n", "for attr in [\"gti\", \"time\", \"blah\"]:\n", " print(f\"New {attr}:\", getattr(ts_new, attr))\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "New gti: [[1. 6.5]]\n", "New time: [1. 1.1 2. 2.1 3. 4. 5. 6.5]\n", "New blah: [1 2 1 2 1 2 2 2]\n" ] } ], "source": [ "ts_new = ts.join(ts_other, strategy=\"none\")\n", "\n", "for attr in [\"gti\", \"time\", \"blah\"]:\n", " print(f\"New {attr}:\", getattr(ts_new, attr))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, `append` will fail, because the GTIs intersect." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "tags": [ "raises-exception" ] }, "outputs": [ { "ename": "ValueError", "evalue": "In order to append, GTIs must be mutually exclusive.", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn [23], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m ts_new \u001b[38;5;241m=\u001b[39m \u001b[43mts\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mjoin\u001b[49m\u001b[43m(\u001b[49m\u001b[43mts_other\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstrategy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mappend\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/devel/StingraySoftware/stingray/stingray/base.py:1961\u001b[0m, in \u001b[0;36mStingrayTimeseries.join\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1922\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mjoin\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 1923\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1924\u001b[0m \u001b[38;5;124;03m Join other :class:`StingrayTimeseries` objects with the current one.\u001b[39;00m\n\u001b[1;32m 1925\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1959\u001b[0m \u001b[38;5;124;03m The resulting :class:`StingrayTimeseries` object.\u001b[39;00m\n\u001b[1;32m 1960\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1961\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_join_timeseries\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/devel/StingraySoftware/stingray/stingray/base.py:1835\u001b[0m, in \u001b[0;36mStingrayTimeseries._join_timeseries\u001b[0;34m(self, others, strategy, ignore_meta)\u001b[0m\n\u001b[1;32m 1832\u001b[0m new_gti \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1833\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1834\u001b[0m \u001b[38;5;66;03m# For this, initialize the GTIs\u001b[39;00m\n\u001b[0;32m-> 1835\u001b[0m new_gti \u001b[38;5;241m=\u001b[39m \u001b[43mmerge_gtis\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgti\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mall_objs\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstrategy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstrategy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1837\u001b[0m all_time_arrays \u001b[38;5;241m=\u001b[39m [obj\u001b[38;5;241m.\u001b[39mtime \u001b[38;5;28;01mfor\u001b[39;00m obj \u001b[38;5;129;01min\u001b[39;00m all_objs \u001b[38;5;28;01mif\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mtime \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m]\n\u001b[1;32m 1839\u001b[0m new_ts\u001b[38;5;241m.\u001b[39mtime \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mconcatenate(all_time_arrays)\n", "File \u001b[0;32m~/devel/StingraySoftware/stingray/stingray/gti.py:1047\u001b[0m, in \u001b[0;36mmerge_gtis\u001b[0;34m(gti_list, strategy)\u001b[0m\n\u001b[1;32m 1045\u001b[0m gti0 \u001b[38;5;241m=\u001b[39m join_gtis(gti0, gti)\n\u001b[1;32m 1046\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m strategy \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mappend\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m-> 1047\u001b[0m gti0 \u001b[38;5;241m=\u001b[39m \u001b[43mappend_gtis\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgti0\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgti\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1048\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m gti0\n", "File \u001b[0;32m~/devel/StingraySoftware/stingray/stingray/gti.py:1090\u001b[0m, in \u001b[0;36mappend_gtis\u001b[0;34m(gti0, gti1)\u001b[0m\n\u001b[1;32m 1088\u001b[0m \u001b[38;5;66;03m# Check if GTIs are mutually exclusive.\u001b[39;00m\n\u001b[1;32m 1089\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m check_separate(gti0, gti1):\n\u001b[0;32m-> 1090\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIn order to append, GTIs must be mutually exclusive.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1092\u001b[0m new_gtis \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mconcatenate([gti0, gti1])\n\u001b[1;32m 1093\u001b[0m order \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39margsort(new_gtis[:, \u001b[38;5;241m0\u001b[39m])\n", "\u001b[0;31mValueError\u001b[0m: In order to append, GTIs must be mutually exclusive." ] } ], "source": [ "ts_new = ts.join(ts_other, strategy=\"append\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Empty `StingrayTimeseries` will throw warnings but try to be accommodating" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "StingrayTimeseries().join(StingrayTimeseries()).time is None" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts = StingrayTimeseries(time=[1, 2, 3])\n", "ts_other = StingrayTimeseries()\n", "ts_new = ts.join(ts_other)\n", "ts_new.time\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When the data being merged have a different time resolution (e.g. unevenly sampled data, events from instruments with different frame times), the time resolution becomes an array attribute:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 1, 1, 3, 3, 3])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts = StingrayTimeseries(time=[10, 20, 30], dt=1)\n", "ts_other = StingrayTimeseries(time=[40, 50, 60], dt=3)\n", "ts_new = ts.join(ts_other, strategy=\"union\")\n", "\n", "ts_new.dt\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In all other cases, meta attributes are simply transformed into a comma-separated list (if strings) or tuples" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((1, 3), 'a,b')" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts = StingrayTimeseries(time=[10, 20, 30], a=1, b=\"a\")\n", "ts_other = StingrayTimeseries(time=[40, 50, 60], a=3, b=\"b\")\n", "ts_new = ts.join(ts_other, strategy=\"union\")\n", "\n", "ts_new.a, ts_new.b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Array attributes that are only in one series will receive `nan` values in the data corresponding to the other series" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 3., 3., 3., nan, nan])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts = StingrayTimeseries(time=[1, 2, 3], blah=[3, 3, 3])\n", "ts_other = StingrayTimeseries(time=[4, 5])\n", "ts_new = ts.join(ts_other, strategy=\"union\")\n", "\n", "ts_new.blah\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When using `strategy=\"infer\"`, the intersection or the union will be used depending on the fact that GTI overlap or not" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 3., 3., 3., nan, nan]), array([3, 3, 4, 4, 3]))" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts = StingrayTimeseries(time=[1, 2, 3], blah=[3, 3, 3], gti=[[0.5, 3.5]])\n", "ts1 = StingrayTimeseries(time=[5, 6], gti=[[4.5, 6.5]])\n", "ts2 = StingrayTimeseries(time=[2.1, 2.9], blah=[4, 4], gti=[[1.5, 3.5]])\n", "ts_new_1 = ts.join(ts1, strategy=\"infer\")\n", "ts_new_2 = ts.join(ts2, strategy=\"infer\")\n", "\n", "ts_new_1.blah, ts_new_2.blah\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Operations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Addition/Subtraction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Two time series can be summed up or subtracted from each other **if they have same time arrays.**" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "ts = StingrayTimeseries(times, array_attrs={\"blabla\":counts}, dt=1, skip_checks=True)\n", "ts_rand = StingrayTimeseries(times, array_attrs={\"blabla\": [600]*1000}, dt=1, skip_checks=True)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "ts_sum = ts + ts_rand" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Counts in light curve 1: [ 96 92 92 103 101]\n", "Counts in light curve 2: [600 600 600 600 600]\n", "Counts in summed light curve: [696 692 692 703 701]\n" ] } ], "source": [ "print(\"Counts in light curve 1: \" + str(ts.blabla[:5]))\n", "print(\"Counts in light curve 2: \" + str(ts_rand.blabla[:5]))\n", "print(\"Counts in summed light curve: \" + str(ts_sum.blabla[:5]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Negation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A negation operation on the time series object inverts the count array from positive to negative values." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "ts_neg = -ts" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "ts_sum = ts + ts_neg" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.all(ts_sum.blabla == 0) # All the points on ts and ts_neg cancel each other" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Indexing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Count value at a particular time can be obtained using indexing." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts[120]" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([120]), array([99]), 120, 99)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts[120].time, ts[120].blabla, ts.time[120], ts.blabla[120]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A Lightcurve can also be sliced to generate a new object." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "ts_sliced = ts[100:200]" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "100" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(ts_sliced.blabla)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Other useful Methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Two time series can be combined into a single object using the `concatenate` method. Note that both of them must not have overlapping time arrays." ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "ts_1 = ts\n", "ts_2 = StingrayTimeseries(np.arange(1000, 2000), array_attrs={\"blabla\": np.random.rand(1000)*1000}, dt=1, skip_checks=True)\n", "ts_long = ts_1.concatenate(ts_2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The method will fail if the time series have overlaps:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "tags": [ "raises-exception" ] }, "outputs": [ { "ename": "ValueError", "evalue": "In order to append, GTIs must be mutually exclusive.", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn [41], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mts_1\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconcatenate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mStingrayTimeseries\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43marange\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m800\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgti\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m800\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/devel/StingraySoftware/stingray/stingray/base.py:1749\u001b[0m, in \u001b[0;36mStingrayTimeseries.concatenate\u001b[0;34m(self, other, check_gti)\u001b[0m\n\u001b[1;32m 1747\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1748\u001b[0m treatment \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnone\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m-> 1749\u001b[0m new_ts \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_join_timeseries\u001b[49m\u001b[43m(\u001b[49m\u001b[43mother\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstrategy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtreatment\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1750\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m new_ts\n", "File \u001b[0;32m~/devel/StingraySoftware/stingray/stingray/base.py:1835\u001b[0m, in \u001b[0;36mStingrayTimeseries._join_timeseries\u001b[0;34m(self, others, strategy, ignore_meta)\u001b[0m\n\u001b[1;32m 1832\u001b[0m new_gti \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1833\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1834\u001b[0m \u001b[38;5;66;03m# For this, initialize the GTIs\u001b[39;00m\n\u001b[0;32m-> 1835\u001b[0m new_gti \u001b[38;5;241m=\u001b[39m \u001b[43mmerge_gtis\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgti\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mobj\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mall_objs\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstrategy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstrategy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1837\u001b[0m all_time_arrays \u001b[38;5;241m=\u001b[39m [obj\u001b[38;5;241m.\u001b[39mtime \u001b[38;5;28;01mfor\u001b[39;00m obj \u001b[38;5;129;01min\u001b[39;00m all_objs \u001b[38;5;28;01mif\u001b[39;00m obj\u001b[38;5;241m.\u001b[39mtime \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m]\n\u001b[1;32m 1839\u001b[0m new_ts\u001b[38;5;241m.\u001b[39mtime \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mconcatenate(all_time_arrays)\n", "File \u001b[0;32m~/devel/StingraySoftware/stingray/stingray/gti.py:1047\u001b[0m, in \u001b[0;36mmerge_gtis\u001b[0;34m(gti_list, strategy)\u001b[0m\n\u001b[1;32m 1045\u001b[0m gti0 \u001b[38;5;241m=\u001b[39m join_gtis(gti0, gti)\n\u001b[1;32m 1046\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m strategy \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mappend\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m-> 1047\u001b[0m gti0 \u001b[38;5;241m=\u001b[39m \u001b[43mappend_gtis\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgti0\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgti\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1048\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m gti0\n", "File \u001b[0;32m~/devel/StingraySoftware/stingray/stingray/gti.py:1090\u001b[0m, in \u001b[0;36mappend_gtis\u001b[0;34m(gti0, gti1)\u001b[0m\n\u001b[1;32m 1088\u001b[0m \u001b[38;5;66;03m# Check if GTIs are mutually exclusive.\u001b[39;00m\n\u001b[1;32m 1089\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m check_separate(gti0, gti1):\n\u001b[0;32m-> 1090\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIn order to append, GTIs must be mutually exclusive.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1092\u001b[0m new_gtis \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mconcatenate([gti0, gti1])\n\u001b[1;32m 1093\u001b[0m order \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39margsort(new_gtis[:, \u001b[38;5;241m0\u001b[39m])\n", "\u001b[0;31mValueError\u001b[0m: In order to append, GTIs must be mutually exclusive." ] } ], "source": [ "ts_1.concatenate(StingrayTimeseries(np.arange(800, 1000), gti=[[800, 1000]]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Truncation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A light curve can also be truncated." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "ts_cut = ts_long.truncate(start=0, stop=1000)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1000" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(ts_cut)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note** : By default, the `start` and `stop` parameters are assumed to be given as **indices** of the time array. However, the `start` and `stop` values can also be given as time values in the same value as the time array." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "ts_cut = ts_long.truncate(start=500, stop=1500, method='time')" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(500, 1499)" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts_cut.time[0], ts_cut.time[-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Re-binning" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The time resolution (`dt`) can also be changed to a larger value.\n", "\n", "**Note** : While the new resolution need not be an integer multiple of the previous time resolution, be aware that if it is not, the last bin will be cut off by the fraction left over by the integer division." ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "ts_rebinned = ts_long.rebin(2)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Old time resolution = 1\n", "Number of data points = 2000\n", "New time resolution = 2\n", "Number of data points = 1000\n" ] } ], "source": [ "print(\"Old time resolution = \" + str(ts_long.dt))\n", "print(\"Number of data points = \" + str(ts_long.n))\n", "print(\"New time resolution = \" + str(ts_rebinned.dt))\n", "print(\"Number of data points = \" + str(ts_rebinned.n))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sorting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A time series can be sorted using the `sort` method. This function sorts `time` array and the `counts` array is changed accordingly." ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "new_ts = StingrayTimeseries(time=[2, 1, 3], array_attrs={\"blabla\": [200, 100, 300]}, dt=1)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "new_ts_sort = new_ts.sort(reverse=True)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([3, 2, 1]), array([300, 200, 100]))" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_ts_sort.time, new_ts_sort.blabla" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A curve can be plotted with the `plot` method. Time intervals outside GTIs will be plotted as vertical red bands. " ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGwCAYAAABPSaTdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgLklEQVR4nO3deXwTdfoH8E/StOnd9KAXtKVQoNyUu1widEFAvPWHyyLgtbsiiu7Pg1XQdVVc9KcuyMK6KrsqqOsusoqKi4AgWkoLlPsoUNpC6U2a3mmT+f1RCA1N2zSZZCbTz/v16uvVZiaTJ9Nk8mTm+T5flSAIAoiIiIgUSi11AERERESuxGSHiIiIFI3JDhERESkakx0iIiJSNCY7REREpGhMdoiIiEjRmOwQERGRommkDkAOzGYzCgsLERQUBJVKJXU4REREZAdBEFBVVYXY2Fio1W2fv2GyA6CwsBBxcXGibzcYwPNXfn8ZgEH0RyBPdvX10U3qQEiWSsHjhqvxPeg+rn49FxQUoEePHm0uV7GDMlBZWQmdToeCggIEBweLtl1VURG0L74IAGh48UUI0dGibZs8n+X14ecHwd9f6nBIRlS1tUBdHY8bLsb3oHu48vVsMBgQFxcHvV6PkJCQNtfjmR3AcukqODhY1GQHNTWAjw8AwCcoCBBz2+T5rr4+dDogKEjqaEhOfHwAk4nHDVfje9A93PB67qgEhQXKREREpGhMdoiIiEjRmOwQERGRojHZISIiIkVjskNERESKxmSHiIiIFI3JDhERESkakx0iIiJSNCY7REREpGhMdoiIiEjRmOwQERGRojHZISIiIkVjskNEZIdGkxnGJrPUYRCRAzjrORFRB2qNTfj7T+dhFgT8amwCdP4+UodERJ3AMztERB3Q1zbCaDKjySygvNoodThE1ElMdoiIiEjRmOwQERGRojHZISIiIkVjskNERESKxmSHiIiIFI3JDhERESkakx0iIiJSNCY7REREpGhMdoiIiEjRmOwQERGRojHZISIiIkVjskNERESKxmSHiIiIFI3JDhERESkakx0iIiJSNCY7REREpGhMdoiIiEjRmOwQERGRojHZISIiIkVjskNERESKxmSHiIiIFI3JDhERESkakx0iIiJSNCY7REREpGiSJju7d+/G7NmzERsbC5VKhc2bN1stf/HFF5GcnIyAgACEhoYiLS0NGRkZVutUVFRg7ty5CA4Ohk6nwwMPPIDq6mo3PgsiIiKSM0mTnZqaGgwdOhRr1qyxubxv37545513cOTIEezZswc9e/bEtGnTUFpaalln7ty5OHbsGLZt24YtW7Zg9+7dePjhh931FIiIiEjmNFI++IwZMzBjxow2l//yl7+0+vvNN9/E+++/j8OHD2Pq1Kk4ceIEtm7diszMTIwcORIAsHr1asycORNvvPEGYmNjXRo/ERHZp6iyHqeLq5DaOxzeXqygIPfymFec0WjEu+++i5CQEAwdOhQAkJ6eDp1OZ0l0ACAtLQ1qtbrV5a6WGhoaYDAYrH6IiMh1bnlnD+77YB/W/nBW6lCoC5J9srNlyxYEBgbC19cXb731FrZt24aIiAgAQFFRESIjI63W12g0CAsLQ1FRUZvbXLFiBUJCQiw/cXFxLn0ORERdXUlVAwDgyMVKiSOhrkj2yc6NN96I7Oxs/Pzzz7jppptwzz33oKSkxKltLl26FJWVlZafgoICkaIlIiIiuZF9shMQEICkpCSMHTsW77//PjQaDd5//30AQHR0dKvEp6mpCRUVFYiOjm5zm1qtFsHBwVY/REREpEyyT3auZzab0dDQfDo0NTUVer0e+/fvtyzfsWMHzGYzxowZI1WIXUpNQxP+tvscvj9ebPd9TlwyYNX2HOSX17owMhJbWXUD9p4rh77WKHUoRESdIulorOrqapw5c8byd25uLrKzsxEWFobw8HC88soruOWWWxATE4OysjKsWbMGFy9exN133w0A6N+/P2666SY89NBDWLduHRobG/Hoo49izpw5HInlJpuzL+KVb04AAI7+YToCtR2/pB74eyYKK+uRfrYcnzw81tUhkki2HCqEvq4ReeW1+J9RrHMjIs8habKTlZWFG2+80fL3k08+CQCYP38+1q1bh5MnT+If//gHysrKEB4ejlGjRuHHH3/EwIEDLffZsGEDHn30UUydOhVqtRp33nknVq1a5fbn0lVV1zdZfm9oNNmV7BRW1gMADhZcdllcJD59XSMA4FJlncSREBF1jqTJzuTJkyEIQpvLN23a1OE2wsLCsHHjRjHDIiIiIgXxuJodIiIios5gskNERESKxmSHiIiIFI3JDhERESkakx0iIiJSNCY7REREpGiSDj0nIiIiedLXGvHloUIEajW4LaU71CqV1CE5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1NbWwmg0Wm4LCgrCgQMH8MknnyAmJgbLly/H0KFDodfrLetUVFQAALp16ybKcyUi8TDZISLFGj58OI4dO4aePXsiKSnJ6icgIMDmfYYNGwYAOH78uNXtGo0GaWlpWLlyJQ4fPozz589jx44dluVHjx5Fjx49EBER4bLnQ0SOYbJDRIq1aNEiVFRU4N5770VmZibOnj2L7777DgsXLoTJZLJ5n27dumH48OHYs2eP5bYtW7Zg1apVyM7ORl5eHj788EOYzWb069fPss6PP/6IadOmufw5EVHnMdkhIsWKjY3FTz/9BJPJhGnTpmHw4MFYsmQJdDod1Oq2D38PPvggNmzYYPlbp9Nh06ZNmDJlCvr3749169bhk08+wcCBAwEA9fX12Lx5Mx566CGXPyci6jw2FSQiuk5dXR369euHzz77DKmpqR2uv3btWnzxxRf473//64boiKizeGaHiOg6fn5++PDDD9ttPtiSt7c3Vq9e7eKoiMhRPLNDREREisYzO0RERKRoTHaIiIhI0ZjsEBERkaIx2SEiIiJFY7JDREREisZkh4iIiBSNyQ4REREpGpMdIiIiUjQmO0RERKRo/w9sSMJMvJrh2AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ts.gti = np.asarray([[1, 300], [600, 800]])\n", "ts.plot(\"blabla\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If a given array attr has an error bar (indicated by the attribute name + `_err`), one can specify `witherrors=True` to plot the attribute." ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ts.blabla_err = ts.blabla / 10.\n", "ts.plot(\"blabla\", labels=[\"Time (s)\", \"blabla (cts)\"], witherrors=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A plot can also be customized using several keyword arguments." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on method plot in module stingray.base:\n", "\n", "plot(attr, witherrors=False, labels=None, ax=None, title=None, marker='-', save=False, filename=None, plot_btis=True) method of stingray.base.StingrayTimeseries instance\n", " Plot the time series using ``matplotlib``.\n", " \n", " Plot the time series object on a graph ``self.time`` on x-axis and\n", " ``self.counts`` on y-axis with ``self.counts_err`` optionally\n", " as error bars.\n", " \n", " Parameters\n", " ----------\n", " attr: str\n", " Attribute to plot.\n", " \n", " Other parameters\n", " ----------------\n", " witherrors: boolean, default False\n", " Whether to plot the StingrayTimeseries with errorbars or not\n", " labels : iterable, default ``None``\n", " A list or tuple with ``xlabel`` and ``ylabel`` as strings. E.g.\n", " if the attribute is ``'counts'``, the list of labels\n", " could be ``['Time (s)', 'Counts (s^-1)']``\n", " ax : ``matplotlib.pyplot.axis`` object\n", " Axis to be used for plotting. Defaults to creating a new one.\n", " title : str, default ``None``\n", " The title of the plot.\n", " marker : str, default '-'\n", " Line style and color of the plot. Line styles and colors are\n", " combined in a single format string, as in ``'bo'`` for blue\n", " circles. See ``matplotlib.pyplot.plot`` for more options.\n", " save : boolean, optional, default ``False``\n", " If ``True``, save the figure with specified filename.\n", " filename : str\n", " File name of the image to save. Depends on the boolean ``save``.\n", " plot_btis : bool\n", " Plot the bad time intervals as red areas on the plot\n", "\n" ] } ], "source": [ "help(ts.plot)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The figure drawn can also be saved in a file using keywords arguments in the plot method itself." ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ts.plot(\"blabla\", marker = 'k', save=True, filename=\"lightcurve.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### MJDREF and Shifting Times\n", "\n", "The `mjdref` keyword argument defines a reference time in Modified Julian Date. Often, X-ray missions count their internal time in seconds from a given reference date and time (so that numbers don't become arbitrarily large). The data is then in the format of Mission Elapsed Time (MET), or seconds since that reference time. \n", "\n", "`mjdref` is generally passed into the `Lightcurve` object at instantiation, but it can be changed later:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "91254\n" ] } ], "source": [ "mjdref = 91254\n", "time = np.arange(1000)\n", "counts = np.random.poisson(100, size=len(time))\n", "\n", "ts = StingrayTimeseries(time, array_attrs={\"counts\": counts}, dt=1, skip_checks=True, mjdref=mjdref)\n", "print(ts.mjdref)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "91253.99976851852\n" ] } ], "source": [ "mjdref_new = mjdref - 20 / 86400 # Subtract 20 seconds from MJDREF\n", "ts_new = ts.change_mjdref(mjdref_new)\n", "print(ts_new.mjdref)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 19.99999965, 20.99999965, 21.99999965, 22.99999965,\n", " 23.99999965, 24.99999965, 25.99999965, 26.99999965,\n", " 27.99999965, 28.99999965, 29.99999965, 30.99999965,\n", " 31.99999965, 32.99999965, 33.99999965, 34.99999965,\n", " 35.99999965, 36.99999965, 37.99999965, 38.99999965,\n", " 39.99999965, 40.99999965, 41.99999965, 42.99999965,\n", " 43.99999965, 44.99999965, 45.99999965, 46.99999965,\n", " 47.99999965, 48.99999965, 49.99999965, 50.99999965,\n", " 51.99999965, 52.99999965, 53.99999965, 54.99999965,\n", " 55.99999965, 56.99999965, 57.99999965, 58.99999965,\n", " 59.99999965, 60.99999965, 61.99999965, 62.99999965,\n", " 63.99999965, 64.99999965, 65.99999965, 66.99999965,\n", " 67.99999965, 68.99999965, 69.99999965, 70.99999965,\n", " 71.99999965, 72.99999965, 73.99999965, 74.99999965,\n", " 75.99999965, 76.99999965, 77.99999965, 78.99999965,\n", " 79.99999965, 80.99999965, 81.99999965, 82.99999965,\n", " 83.99999965, 84.99999965, 85.99999965, 86.99999965,\n", " 87.99999965, 88.99999965, 89.99999965, 90.99999965,\n", " 91.99999965, 92.99999965, 93.99999965, 94.99999965,\n", " 95.99999965, 96.99999965, 97.99999965, 98.99999965,\n", " 99.99999965, 100.99999965, 101.99999965, 102.99999965,\n", " 103.99999965, 104.99999965, 105.99999965, 106.99999965,\n", " 107.99999965, 108.99999965, 109.99999965, 110.99999965,\n", " 111.99999965, 112.99999965, 113.99999965, 114.99999965,\n", " 115.99999965, 116.99999965, 117.99999965, 118.99999965,\n", " 119.99999965, 120.99999965, 121.99999965, 122.99999965,\n", " 123.99999965, 124.99999965, 125.99999965, 126.99999965,\n", " 127.99999965, 128.99999965, 129.99999965, 130.99999965,\n", " 131.99999965, 132.99999965, 133.99999965, 134.99999965,\n", " 135.99999965, 136.99999965, 137.99999965, 138.99999965,\n", " 139.99999965, 140.99999965, 141.99999965, 142.99999965,\n", " 143.99999965, 144.99999965, 145.99999965, 146.99999965,\n", " 147.99999965, 148.99999965, 149.99999965, 150.99999965,\n", " 151.99999965, 152.99999965, 153.99999965, 154.99999965,\n", " 155.99999965, 156.99999965, 157.99999965, 158.99999965,\n", " 159.99999965, 160.99999965, 161.99999965, 162.99999965,\n", " 163.99999965, 164.99999965, 165.99999965, 166.99999965,\n", " 167.99999965, 168.99999965, 169.99999965, 170.99999965,\n", " 171.99999965, 172.99999965, 173.99999965, 174.99999965,\n", " 175.99999965, 176.99999965, 177.99999965, 178.99999965,\n", " 179.99999965, 180.99999965, 181.99999965, 182.99999965,\n", " 183.99999965, 184.99999965, 185.99999965, 186.99999965,\n", " 187.99999965, 188.99999965, 189.99999965, 190.99999965,\n", " 191.99999965, 192.99999965, 193.99999965, 194.99999965,\n", " 195.99999965, 196.99999965, 197.99999965, 198.99999965,\n", " 199.99999965, 200.99999965, 201.99999965, 202.99999965,\n", " 203.99999965, 204.99999965, 205.99999965, 206.99999965,\n", " 207.99999965, 208.99999965, 209.99999965, 210.99999965,\n", " 211.99999965, 212.99999965, 213.99999965, 214.99999965,\n", " 215.99999965, 216.99999965, 217.99999965, 218.99999965,\n", " 219.99999965, 220.99999965, 221.99999965, 222.99999965,\n", " 223.99999965, 224.99999965, 225.99999965, 226.99999965,\n", " 227.99999965, 228.99999965, 229.99999965, 230.99999965,\n", " 231.99999965, 232.99999965, 233.99999965, 234.99999965,\n", " 235.99999965, 236.99999965, 237.99999965, 238.99999965,\n", " 239.99999965, 240.99999965, 241.99999965, 242.99999965,\n", " 243.99999965, 244.99999965, 245.99999965, 246.99999965,\n", " 247.99999965, 248.99999965, 249.99999965, 250.99999965,\n", " 251.99999965, 252.99999965, 253.99999965, 254.99999965,\n", " 255.99999965, 256.99999965, 257.99999965, 258.99999965,\n", " 259.99999965, 260.99999965, 261.99999965, 262.99999965,\n", " 263.99999965, 264.99999965, 265.99999965, 266.99999965,\n", " 267.99999965, 268.99999965, 269.99999965, 270.99999965,\n", " 271.99999965, 272.99999965, 273.99999965, 274.99999965,\n", " 275.99999965, 276.99999965, 277.99999965, 278.99999965,\n", " 279.99999965, 280.99999965, 281.99999965, 282.99999965,\n", " 283.99999965, 284.99999965, 285.99999965, 286.99999965,\n", " 287.99999965, 288.99999965, 289.99999965, 290.99999965,\n", " 291.99999965, 292.99999965, 293.99999965, 294.99999965,\n", " 295.99999965, 296.99999965, 297.99999965, 298.99999965,\n", " 299.99999965, 300.99999965, 301.99999965, 302.99999965,\n", " 303.99999965, 304.99999965, 305.99999965, 306.99999965,\n", " 307.99999965, 308.99999965, 309.99999965, 310.99999965,\n", " 311.99999965, 312.99999965, 313.99999965, 314.99999965,\n", " 315.99999965, 316.99999965, 317.99999965, 318.99999965,\n", " 319.99999965, 320.99999965, 321.99999965, 322.99999965,\n", " 323.99999965, 324.99999965, 325.99999965, 326.99999965,\n", " 327.99999965, 328.99999965, 329.99999965, 330.99999965,\n", " 331.99999965, 332.99999965, 333.99999965, 334.99999965,\n", " 335.99999965, 336.99999965, 337.99999965, 338.99999965,\n", " 339.99999965, 340.99999965, 341.99999965, 342.99999965,\n", " 343.99999965, 344.99999965, 345.99999965, 346.99999965,\n", " 347.99999965, 348.99999965, 349.99999965, 350.99999965,\n", " 351.99999965, 352.99999965, 353.99999965, 354.99999965,\n", " 355.99999965, 356.99999965, 357.99999965, 358.99999965,\n", " 359.99999965, 360.99999965, 361.99999965, 362.99999965,\n", " 363.99999965, 364.99999965, 365.99999965, 366.99999965,\n", " 367.99999965, 368.99999965, 369.99999965, 370.99999965,\n", " 371.99999965, 372.99999965, 373.99999965, 374.99999965,\n", " 375.99999965, 376.99999965, 377.99999965, 378.99999965,\n", " 379.99999965, 380.99999965, 381.99999965, 382.99999965,\n", " 383.99999965, 384.99999965, 385.99999965, 386.99999965,\n", " 387.99999965, 388.99999965, 389.99999965, 390.99999965,\n", " 391.99999965, 392.99999965, 393.99999965, 394.99999965,\n", " 395.99999965, 396.99999965, 397.99999965, 398.99999965,\n", " 399.99999965, 400.99999965, 401.99999965, 402.99999965,\n", " 403.99999965, 404.99999965, 405.99999965, 406.99999965,\n", " 407.99999965, 408.99999965, 409.99999965, 410.99999965,\n", " 411.99999965, 412.99999965, 413.99999965, 414.99999965,\n", " 415.99999965, 416.99999965, 417.99999965, 418.99999965,\n", " 419.99999965, 420.99999965, 421.99999965, 422.99999965,\n", " 423.99999965, 424.99999965, 425.99999965, 426.99999965,\n", " 427.99999965, 428.99999965, 429.99999965, 430.99999965,\n", " 431.99999965, 432.99999965, 433.99999965, 434.99999965,\n", " 435.99999965, 436.99999965, 437.99999965, 438.99999965,\n", " 439.99999965, 440.99999965, 441.99999965, 442.99999965,\n", " 443.99999965, 444.99999965, 445.99999965, 446.99999965,\n", " 447.99999965, 448.99999965, 449.99999965, 450.99999965,\n", " 451.99999965, 452.99999965, 453.99999965, 454.99999965,\n", " 455.99999965, 456.99999965, 457.99999965, 458.99999965,\n", " 459.99999965, 460.99999965, 461.99999965, 462.99999965,\n", " 463.99999965, 464.99999965, 465.99999965, 466.99999965,\n", " 467.99999965, 468.99999965, 469.99999965, 470.99999965,\n", " 471.99999965, 472.99999965, 473.99999965, 474.99999965,\n", " 475.99999965, 476.99999965, 477.99999965, 478.99999965,\n", " 479.99999965, 480.99999965, 481.99999965, 482.99999965,\n", " 483.99999965, 484.99999965, 485.99999965, 486.99999965,\n", " 487.99999965, 488.99999965, 489.99999965, 490.99999965,\n", " 491.99999965, 492.99999965, 493.99999965, 494.99999965,\n", " 495.99999965, 496.99999965, 497.99999965, 498.99999965,\n", " 499.99999965, 500.99999965, 501.99999965, 502.99999965,\n", " 503.99999965, 504.99999965, 505.99999965, 506.99999965,\n", " 507.99999965, 508.99999965, 509.99999965, 510.99999965,\n", " 511.99999965, 512.99999965, 513.99999965, 514.99999965,\n", " 515.99999965, 516.99999965, 517.99999965, 518.99999965,\n", " 519.99999965, 520.99999965, 521.99999965, 522.99999965,\n", " 523.99999965, 524.99999965, 525.99999965, 526.99999965,\n", " 527.99999965, 528.99999965, 529.99999965, 530.99999965,\n", " 531.99999965, 532.99999965, 533.99999965, 534.99999965,\n", " 535.99999965, 536.99999965, 537.99999965, 538.99999965,\n", " 539.99999965, 540.99999965, 541.99999965, 542.99999965,\n", " 543.99999965, 544.99999965, 545.99999965, 546.99999965,\n", " 547.99999965, 548.99999965, 549.99999965, 550.99999965,\n", " 551.99999965, 552.99999965, 553.99999965, 554.99999965,\n", " 555.99999965, 556.99999965, 557.99999965, 558.99999965,\n", " 559.99999965, 560.99999965, 561.99999965, 562.99999965,\n", " 563.99999965, 564.99999965, 565.99999965, 566.99999965,\n", " 567.99999965, 568.99999965, 569.99999965, 570.99999965,\n", " 571.99999965, 572.99999965, 573.99999965, 574.99999965,\n", " 575.99999965, 576.99999965, 577.99999965, 578.99999965,\n", " 579.99999965, 580.99999965, 581.99999965, 582.99999965,\n", " 583.99999965, 584.99999965, 585.99999965, 586.99999965,\n", " 587.99999965, 588.99999965, 589.99999965, 590.99999965,\n", " 591.99999965, 592.99999965, 593.99999965, 594.99999965,\n", " 595.99999965, 596.99999965, 597.99999965, 598.99999965,\n", " 599.99999965, 600.99999965, 601.99999965, 602.99999965,\n", " 603.99999965, 604.99999965, 605.99999965, 606.99999965,\n", " 607.99999965, 608.99999965, 609.99999965, 610.99999965,\n", " 611.99999965, 612.99999965, 613.99999965, 614.99999965,\n", " 615.99999965, 616.99999965, 617.99999965, 618.99999965,\n", " 619.99999965, 620.99999965, 621.99999965, 622.99999965,\n", " 623.99999965, 624.99999965, 625.99999965, 626.99999965,\n", " 627.99999965, 628.99999965, 629.99999965, 630.99999965,\n", " 631.99999965, 632.99999965, 633.99999965, 634.99999965,\n", " 635.99999965, 636.99999965, 637.99999965, 638.99999965,\n", " 639.99999965, 640.99999965, 641.99999965, 642.99999965,\n", " 643.99999965, 644.99999965, 645.99999965, 646.99999965,\n", " 647.99999965, 648.99999965, 649.99999965, 650.99999965,\n", " 651.99999965, 652.99999965, 653.99999965, 654.99999965,\n", " 655.99999965, 656.99999965, 657.99999965, 658.99999965,\n", " 659.99999965, 660.99999965, 661.99999965, 662.99999965,\n", " 663.99999965, 664.99999965, 665.99999965, 666.99999965,\n", " 667.99999965, 668.99999965, 669.99999965, 670.99999965,\n", " 671.99999965, 672.99999965, 673.99999965, 674.99999965,\n", " 675.99999965, 676.99999965, 677.99999965, 678.99999965,\n", " 679.99999965, 680.99999965, 681.99999965, 682.99999965,\n", " 683.99999965, 684.99999965, 685.99999965, 686.99999965,\n", " 687.99999965, 688.99999965, 689.99999965, 690.99999965,\n", " 691.99999965, 692.99999965, 693.99999965, 694.99999965,\n", " 695.99999965, 696.99999965, 697.99999965, 698.99999965,\n", " 699.99999965, 700.99999965, 701.99999965, 702.99999965,\n", " 703.99999965, 704.99999965, 705.99999965, 706.99999965,\n", " 707.99999965, 708.99999965, 709.99999965, 710.99999965,\n", " 711.99999965, 712.99999965, 713.99999965, 714.99999965,\n", " 715.99999965, 716.99999965, 717.99999965, 718.99999965,\n", " 719.99999965, 720.99999965, 721.99999965, 722.99999965,\n", " 723.99999965, 724.99999965, 725.99999965, 726.99999965,\n", " 727.99999965, 728.99999965, 729.99999965, 730.99999965,\n", " 731.99999965, 732.99999965, 733.99999965, 734.99999965,\n", " 735.99999965, 736.99999965, 737.99999965, 738.99999965,\n", " 739.99999965, 740.99999965, 741.99999965, 742.99999965,\n", " 743.99999965, 744.99999965, 745.99999965, 746.99999965,\n", " 747.99999965, 748.99999965, 749.99999965, 750.99999965,\n", " 751.99999965, 752.99999965, 753.99999965, 754.99999965,\n", " 755.99999965, 756.99999965, 757.99999965, 758.99999965,\n", " 759.99999965, 760.99999965, 761.99999965, 762.99999965,\n", " 763.99999965, 764.99999965, 765.99999965, 766.99999965,\n", " 767.99999965, 768.99999965, 769.99999965, 770.99999965,\n", " 771.99999965, 772.99999965, 773.99999965, 774.99999965,\n", " 775.99999965, 776.99999965, 777.99999965, 778.99999965,\n", " 779.99999965, 780.99999965, 781.99999965, 782.99999965,\n", " 783.99999965, 784.99999965, 785.99999965, 786.99999965,\n", " 787.99999965, 788.99999965, 789.99999965, 790.99999965,\n", " 791.99999965, 792.99999965, 793.99999965, 794.99999965,\n", " 795.99999965, 796.99999965, 797.99999965, 798.99999965,\n", " 799.99999965, 800.99999965, 801.99999965, 802.99999965,\n", " 803.99999965, 804.99999965, 805.99999965, 806.99999965,\n", " 807.99999965, 808.99999965, 809.99999965, 810.99999965,\n", " 811.99999965, 812.99999965, 813.99999965, 814.99999965,\n", " 815.99999965, 816.99999965, 817.99999965, 818.99999965,\n", " 819.99999965, 820.99999965, 821.99999965, 822.99999965,\n", " 823.99999965, 824.99999965, 825.99999965, 826.99999965,\n", " 827.99999965, 828.99999965, 829.99999965, 830.99999965,\n", " 831.99999965, 832.99999965, 833.99999965, 834.99999965,\n", " 835.99999965, 836.99999965, 837.99999965, 838.99999965,\n", " 839.99999965, 840.99999965, 841.99999965, 842.99999965,\n", " 843.99999965, 844.99999965, 845.99999965, 846.99999965,\n", " 847.99999965, 848.99999965, 849.99999965, 850.99999965,\n", " 851.99999965, 852.99999965, 853.99999965, 854.99999965,\n", " 855.99999965, 856.99999965, 857.99999965, 858.99999965,\n", " 859.99999965, 860.99999965, 861.99999965, 862.99999965,\n", " 863.99999965, 864.99999965, 865.99999965, 866.99999965,\n", " 867.99999965, 868.99999965, 869.99999965, 870.99999965,\n", " 871.99999965, 872.99999965, 873.99999965, 874.99999965,\n", " 875.99999965, 876.99999965, 877.99999965, 878.99999965,\n", " 879.99999965, 880.99999965, 881.99999965, 882.99999965,\n", " 883.99999965, 884.99999965, 885.99999965, 886.99999965,\n", " 887.99999965, 888.99999965, 889.99999965, 890.99999965,\n", " 891.99999965, 892.99999965, 893.99999965, 894.99999965,\n", " 895.99999965, 896.99999965, 897.99999965, 898.99999965,\n", " 899.99999965, 900.99999965, 901.99999965, 902.99999965,\n", " 903.99999965, 904.99999965, 905.99999965, 906.99999965,\n", " 907.99999965, 908.99999965, 909.99999965, 910.99999965,\n", " 911.99999965, 912.99999965, 913.99999965, 914.99999965,\n", " 915.99999965, 916.99999965, 917.99999965, 918.99999965,\n", " 919.99999965, 920.99999965, 921.99999965, 922.99999965,\n", " 923.99999965, 924.99999965, 925.99999965, 926.99999965,\n", " 927.99999965, 928.99999965, 929.99999965, 930.99999965,\n", " 931.99999965, 932.99999965, 933.99999965, 934.99999965,\n", " 935.99999965, 936.99999965, 937.99999965, 938.99999965,\n", " 939.99999965, 940.99999965, 941.99999965, 942.99999965,\n", " 943.99999965, 944.99999965, 945.99999965, 946.99999965,\n", " 947.99999965, 948.99999965, 949.99999965, 950.99999965,\n", " 951.99999965, 952.99999965, 953.99999965, 954.99999965,\n", " 955.99999965, 956.99999965, 957.99999965, 958.99999965,\n", " 959.99999965, 960.99999965, 961.99999965, 962.99999965,\n", " 963.99999965, 964.99999965, 965.99999965, 966.99999965,\n", " 967.99999965, 968.99999965, 969.99999965, 970.99999965,\n", " 971.99999965, 972.99999965, 973.99999965, 974.99999965,\n", " 975.99999965, 976.99999965, 977.99999965, 978.99999965,\n", " 979.99999965, 980.99999965, 981.99999965, 982.99999965,\n", " 983.99999965, 984.99999965, 985.99999965, 986.99999965,\n", " 987.99999965, 988.99999965, 989.99999965, 990.99999965,\n", " 991.99999965, 992.99999965, 993.99999965, 994.99999965,\n", " 995.99999965, 996.99999965, 997.99999965, 998.99999965,\n", " 999.99999965, 1000.99999965, 1001.99999965, 1002.99999965,\n", " 1003.99999965, 1004.99999965, 1005.99999965, 1006.99999965,\n", " 1007.99999965, 1008.99999965, 1009.99999965, 1010.99999965,\n", " 1011.99999965, 1012.99999965, 1013.99999965, 1014.99999965,\n", " 1015.99999965, 1016.99999965, 1017.99999965, 1018.99999965])" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts_new.time" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 19.49999965, 1019.49999965]])" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts_new.gti" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This changes the reference time and all the times referred to it. It's very useful when manipulating time series from different missions. Alternatively, one can shift the times (by a value in seconds) without modifying the MJDREF" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [], "source": [ "gti = [(0,500), (600, 1000)]\n", "ts.gti = gti" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "first three time bins: [0 1 2]\n", "GTIs: [[ 0 500]\n", " [ 600 1000]]\n" ] } ], "source": [ "print(\"first three time bins: \" + str(ts.time[:3]))\n", "print(\"GTIs: \" + str(ts.gti))" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "time_shift = 10.0\n", "ts_shifted = ts.shift(time_shift)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shifted first three time bins: [10. 11. 12.]\n", "Shifted GTIs: [[ 10. 510.]\n", " [ 610. 1010.]]\n" ] } ], "source": [ "print(\"Shifted first three time bins: \" + str(ts_shifted.time[:3]))\n", "print(\"Shifted GTIs: \" + str(ts_shifted.gti))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Splitting by GTI\n", "\n", "A special case of splitting your light curve object is to split by GTIs. This can be helpful if you want to look at individual contiguous segments separately:" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "# make a time array with a big gap and a small gap\n", "time = np.arange(20)\n", "counts = np.random.poisson(100, size=len(time))\n", "gti = [(0,8), (12,20)]\n", "\n", "\n", "ts = StingrayTimeseries(time, array_attrs={\"blabla\": counts}, dt=1, gti=gti)" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "ts_split = ts.split_by_gti()" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] [102 97 95 105 100 96 107 119 94 119 101 91 104 89 119 106 111 89\n", " 100 110]\n", "[1 2 3 4 5 6 7] [ 97 95 105 100 96 107 119]\n", "[13 14 15 16 17 18 19] [ 89 119 106 111 89 100 110]\n" ] } ], "source": [ "print(ts.time, ts.blabla)\n", "for ts_tmp in ts_split:\n", " print(ts_tmp.time, ts_tmp.blabla)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because I'd passed in GTIs that define the range from 0-8 and from 12-20 as good time intervals, the light curve will be split into two individual ones containing all data points falling within these ranges.\n", "\n", "You can also apply the GTIs *directly* to the original light curve, which will filter `time`, `counts`, `countrate`, `counts_err` and `countrate_err` to only fall within the bounds of the GTIs:" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "# make a time array with a big gap and a small gap\n", "time = np.arange(20)\n", "counts = np.random.poisson(100, size=len(time))\n", "gti = [(0,8), (12,20)]\n", "\n", "\n", "ts = StingrayTimeseries(time, array_attrs={\"blabla\": counts}, dt=1, gti=gti)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Caution**: This is one of the few methods that change the original state of the object, rather than returning a new copy of it with the changes applied! So any events falling outside of the range of the GTIs will be lost:" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n", " 17, 18, 19])" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# time array before applying GTIs:\n", "ts.time" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts.apply_gtis()" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1, 2, 3, 4, 5, 6, 7, 13, 14, 15, 16, 17, 18, 19])" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# time array after applying GTIs\n", "ts.time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, the time bins 8-12 have been dropped, since they fall outside of the GTIs. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reading/Writing Stingray Timeseries to/from files\n", "\n", "The `StingrayTimeseries` class has roundtrip reading/writing capabilities via the `read` and `write` methods. Most of the I/O is managed by the `astropy.io` infrastructure. We regularly test the roundtrip to Enhanced CSV (`.ecsv`) and Hierarchical Data Format v.5 (`.hdf5`) formats. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Converting StingrayTimeseries to pandas, xarray and Astropy Table/Timeseries\n", "\n", "`StingrayTimeseries` can be converted back and forth to `xarray`, `pandas`, `astropy.table.Table` and `astropy.timeseries.TimeSeries` objects through the relevant `to_FORMAT` and `from_FORMAT`, e.g. Refer to the methods' documentation for more information on how data are stored in each case.\n" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas.core.frame.DataFrame" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(ts.to_pandas())" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "xarray.core.dataset.Dataset" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(ts.to_xarray())" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "astropy.table.table.Table" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(ts.to_astropy_table())" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "astropy.timeseries.sampled.TimeSeries" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(ts.to_astropy_timeseries())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.8" } }, "nbformat": 4, "nbformat_minor": 1 }